sessionInfo()

1 Introduction

This is our Final Project R-markdown document. Our group explored data from two public government databases. The first is titled “DASH - Youth Risk Behavior Surveillance System (YRBSS)”. The dataset monitors six categories of priority health behaviors among youth and young adults. The data acquired is from 1991-2015, and can be accessed through data.world. The link for this data is: https://catalog.data.gov/dataset/dash-youth-risk-behavior-surveillance-system-yrbss-high-school

The remaining data was sourced from US national census data. We explored population demographics of education, income, employment, and race.

2 Extract-Translate-Load (ETL)

In order to extract the pertinent data from our raw CSVs, we generated a number of R-scripts that tidied current data and excised nonrelevant data that were not used in our Tableau and ShinyApp visualizations. Our cleaned-up (post-ETL) versions were then uploaded to the data.world servers, available for downloading and querying. Data manipulations will be shown for only one ACS CSV file, but similar methods were used for the remaining three files.

2.1 1. Raw (Pre-ETL) CSVs:

As you can see below, the raw csv contains data across more variables than were necessary for this project.

library(knitr)
source("../01 Data/getpreMED.R")
kable(preMED, digits = 0)

2.2 2. ETL script to distill data:

Plyr and dplyr functions were used to filter out the pertinent information. Separate scripts were used for each file.

code = readLines("../01 Data/etlMED.r")
show(code)

2.3 3. Finished (Post-ETL) CSV file:

Workable CSVs contain only national data grouped by state (excl. DC and Puerto Rico) and pertaining to population demographic delineations of age, sex, race, income, and employment. The finished CSV documents were much smaller in size, and better enabled us to investigate trends and correlations between datasets.

library(knitr)
source("../01 Data/getpostMED.R")
kable(postMED, digits = 0)

3 Charts

3.1 Non-Aggregated Measures Analysis

Our first non-aggregated measures analysis was a boxplot that broke down youth behavioral survey responses down by grade and question type, allowing one to see how the responses change as the one progresses through the grades. Pages were set to flip through the data by year. Joins were used in this visualization to illustrate the median household income of the state where each data point was collected: lower income values are plotted in red, while higher income values are plotted in green. (we realized that the bunching of darker green circles around the center of the boxplots is most likely just a software effect of tableau when handling a high samplze size, rather that the data suggesting a relationship between highest median income and the average response value)

This visualization shows us a couple patterns and intersting things about risky behavior and youth: First, some risk factors, such as physical fighting and suicide consideration, tend to decrease as one progresses through Highschool, while some factors remain flat (diet) and some increase (alcohol, cigarette, and marijuana use). ) boxplot

Related, we wondered what the differences between the oldest and most recent data values. This second histogram illustrates the differences in responses between 1991 (gold) and 2015 (purple), grouped again by grade and category. Some average greater risk data value seems to show a moderate decrease between the 24 years, such as physical fighting, suicide consideration, currrent alcohol and cigarette use. Diet appears to have similar ranges of responses between the two years, while marijuana use was the only value to significantly increase in recent history. boxplot2

3.2 Aggregated Measures Analysis

[description] ag

3.3 Scatter Plots

[description] sp

3.4 Crosstabs

Our crosstab visualization illustrated the KPI of young adults, subcategorized by sex and race.

Our KPI weighted data from the greater risk data questions, the lesser risk data questions, factored by the proportion of adults with bachelor’s degree in that geographic state.

You can see the trends for race grouped by gender. There appears to be a some commonality between the groups and subgroups regarding their health risk for each variable. Weight loss seems to be the most at-risk variable, followed by alcohol use for girls and physical fighting (and alcohol use) for boys. CrosstabKPI

The crosstab was restructred, this time grouping the sexes next to each other in each race. This grouping suggests that more variation exists between females of different races, than the variation that exists between the males and females of the same race.
CrosstabKPI Lastly, our KPI heatmap showed a significant relationship between geographic location and KPI score. The map below shows groupings of KPI values, with states geographically closer to each other sharing similar KPI scores as well. CrosstabKPImap

3.5 Barcharts

[description] bc

5 Here are our Shiny Plots

5.1 Boxplot

It’s a plotly boxplot that shows the distribution of the various risk factors by topic. You can change which topics you see when you get the data. shinybx

5.2 Histogram

This histogram measures the frequency of risk factors as it relates to their intensity. Becasue the counts for each race were not equal, in order to compare them they are all normalized to where the largest count for a window equals one. Also, you can change the bin sizes on the fly. shinyhs

5.3 Scatter Plot

The labels aren’t showing up for some reason, but the x axis is percentage of white people in a state and the y axis is that states average risk factor. It doesn’t appear very well correlated and there is one outlier (Hawaii). shinysp

5.4 Crosstab

This is a cross tab that shows the various average risk factors in the boxes, depeding on what race is on the x axis and what state is on the y axis. Some values are missing unfortunatley. But that’s to be expected. You wouldn’t think Hawaii would have many American Indians right? The KPI is dependent on wether that risk factor is especially high or low. shinyct

5.5 Barchart

We’ve got this wonderful barchart whose x labels won’t show up. The x axis is risk factor values. It’s faceted by Race and the y axis is topic. The black numbers represent how large of a risk factor it is and the blue numbers represent how far away it is from the window average risk factor, which is the red number. There really shouldn’t be multiple red bars on the tops, but that only appears in the notebook file. If you go to the shinyapp, they aren’t there. shinybc

LS0tCnRpdGxlOiAnPGNlbnRlcj48Yj5Zb3V0aCBTdXJ2ZXkgb2YgUmlza3kgQmVoYXZpb3I8L2I+PC9jZW50ZXI+JwphdXRob3I6ICI8Y2VudGVyPjxiPktpbWJlcmx5IEhvbGxtYW4sIEt5bGUgS2F0emVuLCBSb3kgTGluPC9iPjwvY2VudGVyPiIKZGF0ZTogIjxjZW50ZXI+TWF5IDAzLCAyMDE3PC9jZW50ZXI+IgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogeWVzCiAgaHRtbF9ub3RlYm9vazoKICAgIGRlcHRoOiAzCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcwogICAgdG9jOiB5ZXMKLS0tCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9mbGFnLnBuZykKCmBgYHtyfQpzZXNzaW9uSW5mbygpCmBgYAoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgZmlnLmFsaWduID0gImNlbnRlciIpCm9wdGlvbnMobWF4LnByaW50ID0gNDApCgpgYGAKCiMqKkludHJvZHVjdGlvbioqClRoaXMgaXMgb3VyIEZpbmFsIFByb2plY3QgUi1tYXJrZG93biBkb2N1bWVudC4gT3VyIGdyb3VwIGV4cGxvcmVkIGRhdGEgZnJvbSB0d28gcHVibGljIGdvdmVybm1lbnQgZGF0YWJhc2VzLiAKVGhlIGZpcnN0IGlzIHRpdGxlZCAiREFTSCAtIFlvdXRoIFJpc2sgQmVoYXZpb3IgU3VydmVpbGxhbmNlIFN5c3RlbSAoWVJCU1MpIi4gVGhlIGRhdGFzZXQgbW9uaXRvcnMgc2l4IGNhdGVnb3JpZXMgb2YgcHJpb3JpdHkgaGVhbHRoIGJlaGF2aW9ycyBhbW9uZyB5b3V0aCBhbmQgeW91bmcgYWR1bHRzLiBUaGUgZGF0YSBhY3F1aXJlZCBpcyBmcm9tIDE5OTEtMjAxNSwgYW5kIGNhbiBiZSBhY2Nlc3NlZCB0aHJvdWdoIGRhdGEud29ybGQuIFRoZSBsaW5rIGZvciB0aGlzIGRhdGEgaXM6IGh0dHBzOi8vY2F0YWxvZy5kYXRhLmdvdi9kYXRhc2V0L2Rhc2gteW91dGgtcmlzay1iZWhhdmlvci1zdXJ2ZWlsbGFuY2Utc3lzdGVtLXlyYnNzLWhpZ2gtc2Nob29sCgpUaGUgcmVtYWluaW5nIGRhdGEgd2FzIHNvdXJjZWQgZnJvbSBVUyBuYXRpb25hbCBjZW5zdXMgZGF0YS4gV2UgZXhwbG9yZWQgcG9wdWxhdGlvbiBkZW1vZ3JhcGhpY3Mgb2YgZWR1Y2F0aW9uLCBpbmNvbWUsIGVtcGxveW1lbnQsIGFuZCByYWNlLgoKIyoqRXh0cmFjdC1UcmFuc2xhdGUtTG9hZCAoRVRMKSoqCkluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIHBlcnRpbmVudCBkYXRhIGZyb20gb3VyIHJhdyBDU1ZzLCB3ZSBnZW5lcmF0ZWQgYSBudW1iZXIgb2YgUi1zY3JpcHRzIHRoYXQgdGlkaWVkIGN1cnJlbnQgZGF0YSBhbmQgZXhjaXNlZCBub25yZWxldmFudCBkYXRhIHRoYXQgd2VyZSBub3QgdXNlZCBpbiBvdXIgVGFibGVhdSBhbmQgU2hpbnlBcHAgdmlzdWFsaXphdGlvbnMuIE91ciBjbGVhbmVkLXVwIChwb3N0LUVUTCkgdmVyc2lvbnMgd2VyZSB0aGVuIHVwbG9hZGVkIHRvIHRoZSBkYXRhLndvcmxkIHNlcnZlcnMsIGF2YWlsYWJsZSBmb3IgZG93bmxvYWRpbmcgYW5kIHF1ZXJ5aW5nLgpEYXRhIG1hbmlwdWxhdGlvbnMgd2lsbCBiZSBzaG93biBmb3Igb25seSBvbmUgQUNTIENTViBmaWxlLCBidXQgc2ltaWxhciBtZXRob2RzIHdlcmUgdXNlZCBmb3IgdGhlIHJlbWFpbmluZyB0aHJlZSBmaWxlcy4KCiMjIDEuIFJhdyAoUHJlLUVUTCkgQ1NWczoKQXMgeW91IGNhbiBzZWUgYmVsb3csIHRoZSByYXcgY3N2IGNvbnRhaW5zIGRhdGEgYWNyb3NzIG1vcmUgdmFyaWFibGVzIHRoYW4gd2VyZSBuZWNlc3NhcnkgZm9yIHRoaXMgcHJvamVjdC4gCmBgYHtyIGdldHByZX0KbGlicmFyeShrbml0cikKc291cmNlKCIuLi8wMSBEYXRhL2dldHByZU1FRC5SIikKa2FibGUocHJlTUVELCBkaWdpdHMgPSAwKQpgYGAKCiMjIDIuIEVUTCBzY3JpcHQgdG8gZGlzdGlsbCBkYXRhOgpQbHlyIGFuZCBkcGx5ciBmdW5jdGlvbnMgd2VyZSB1c2VkIHRvIGZpbHRlciBvdXQgdGhlIHBlcnRpbmVudCBpbmZvcm1hdGlvbi4gU2VwYXJhdGUgc2NyaXB0cyB3ZXJlIHVzZWQgZm9yIGVhY2ggZmlsZS4gCmBgYHtyIGV2YWw9RkFMU0UsIGVjaG89VFJVRX0KY29kZSA9IHJlYWRMaW5lcygiLi4vMDEgRGF0YS9ldGxNRUQuciIpCnNob3coY29kZSkKYGBgCgojIyAzLiBGaW5pc2hlZCAoUG9zdC1FVEwpIENTViBmaWxlOgpXb3JrYWJsZSBDU1ZzIGNvbnRhaW4gb25seSBuYXRpb25hbCBkYXRhIGdyb3VwZWQgYnkgc3RhdGUgKGV4Y2wuIERDIGFuZCBQdWVydG8gUmljbykgYW5kIHBlcnRhaW5pbmcgdG8gcG9wdWxhdGlvbiBkZW1vZ3JhcGhpYyBkZWxpbmVhdGlvbnMgb2YgYWdlLCBzZXgsIHJhY2UsIGluY29tZSwgYW5kIGVtcGxveW1lbnQuClRoZSBmaW5pc2hlZCBDU1YgZG9jdW1lbnRzIHdlcmUgbXVjaCBzbWFsbGVyIGluIHNpemUsIGFuZCBiZXR0ZXIgZW5hYmxlZCB1cyB0byBpbnZlc3RpZ2F0ZSB0cmVuZHMgYW5kIGNvcnJlbGF0aW9ucyBiZXR3ZWVuIGRhdGFzZXRzLgpgYGB7ciBnZXRwb3N0fQpsaWJyYXJ5KGtuaXRyKQpzb3VyY2UoIi4uLzAxIERhdGEvZ2V0cG9zdE1FRC5SIikKa2FibGUocG9zdE1FRCwgZGlnaXRzID0gMCkKYGBgCgoKIyAqKkNoYXJ0cyoqCiMjIE5vbi1BZ2dyZWdhdGVkIE1lYXN1cmVzIEFuYWx5c2lzCk91ciBmaXJzdCBub24tYWdncmVnYXRlZCBtZWFzdXJlcyBhbmFseXNpcyB3YXMgYSBib3hwbG90IHRoYXQgYnJva2UgZG93biB5b3V0aCBiZWhhdmlvcmFsIHN1cnZleSByZXNwb25zZXMgZG93biBieSBncmFkZSBhbmQgcXVlc3Rpb24gdHlwZSwgYWxsb3dpbmcgb25lIHRvIHNlZSBob3cgdGhlIHJlc3BvbnNlcyBjaGFuZ2UgYXMgdGhlIG9uZSBwcm9ncmVzc2VzIHRocm91Z2ggdGhlIGdyYWRlcy4gUGFnZXMgd2VyZSBzZXQgdG8gZmxpcCB0aHJvdWdoIHRoZSBkYXRhIGJ5IHllYXIuIEpvaW5zIHdlcmUgdXNlZCBpbiB0aGlzIHZpc3VhbGl6YXRpb24gdG8gaWxsdXN0cmF0ZSB0aGUgbWVkaWFuIGhvdXNlaG9sZCBpbmNvbWUgb2YgdGhlIHN0YXRlIHdoZXJlIGVhY2ggZGF0YSBwb2ludCB3YXMgY29sbGVjdGVkOiBsb3dlciBpbmNvbWUgdmFsdWVzIGFyZSBwbG90dGVkIGluIHJlZCwgd2hpbGUgaGlnaGVyIGluY29tZSB2YWx1ZXMgYXJlIHBsb3R0ZWQgaW4gZ3JlZW4uICh3ZSByZWFsaXplZCB0aGF0IHRoZSBidW5jaGluZyBvZiBkYXJrZXIgZ3JlZW4gY2lyY2xlcyBhcm91bmQgdGhlIGNlbnRlciBvZiB0aGUgYm94cGxvdHMgaXMgbW9zdCBsaWtlbHkganVzdCBhIHNvZnR3YXJlIGVmZmVjdCBvZiB0YWJsZWF1IHdoZW4gaGFuZGxpbmcgYSBoaWdoIHNhbXBsemUgc2l6ZSwgcmF0aGVyIHRoYXQgdGhlIGRhdGEgc3VnZ2VzdGluZyBhIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGhpZ2hlc3QgbWVkaWFuIGluY29tZSBhbmQgdGhlIGF2ZXJhZ2UgcmVzcG9uc2UgdmFsdWUpCgpUaGlzIHZpc3VhbGl6YXRpb24gc2hvd3MgdXMgYSBjb3VwbGUgcGF0dGVybnMgYW5kIGludGVyc3RpbmcgdGhpbmdzIGFib3V0IHJpc2t5IGJlaGF2aW9yIGFuZCB5b3V0aDoKRmlyc3QsIHNvbWUgcmlzayBmYWN0b3JzLCBzdWNoIGFzIHBoeXNpY2FsIGZpZ2h0aW5nIGFuZCBzdWljaWRlIGNvbnNpZGVyYXRpb24sIHRlbmQgdG8gZGVjcmVhc2UgYXMgb25lIHByb2dyZXNzZXMgdGhyb3VnaCBIaWdoc2Nob29sLCB3aGlsZSBzb21lIGZhY3RvcnMgcmVtYWluIGZsYXQgKGRpZXQpIGFuZCBzb21lIGluY3JlYXNlIChhbGNvaG9sLCBjaWdhcmV0dGUsIGFuZCBtYXJpanVhbmEgdXNlKS4KKQohW2JveHBsb3RdKC4uLzAzIFZpc3VhbGl6YXRpb25zL2JveHBsb3Rqb2luczIucG5nKQoKUmVsYXRlZCwgd2Ugd29uZGVyZWQgd2hhdCB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgb2xkZXN0IGFuZCBtb3N0IHJlY2VudCBkYXRhIHZhbHVlcy4gVGhpcyBzZWNvbmQgaGlzdG9ncmFtIGlsbHVzdHJhdGVzIHRoZSBkaWZmZXJlbmNlcyBpbiByZXNwb25zZXMgYmV0d2VlbiAxOTkxIChnb2xkKSBhbmQgMjAxNSAocHVycGxlKSwgZ3JvdXBlZCBhZ2FpbiBieSBncmFkZSBhbmQgY2F0ZWdvcnkuIApTb21lIGF2ZXJhZ2UgZ3JlYXRlciByaXNrIGRhdGEgdmFsdWUgc2VlbXMgdG8gc2hvdyBhIG1vZGVyYXRlIGRlY3JlYXNlIGJldHdlZW4gdGhlIDI0IHllYXJzLCBzdWNoIGFzIHBoeXNpY2FsIGZpZ2h0aW5nLCAgc3VpY2lkZSBjb25zaWRlcmF0aW9uLCBjdXJycmVudCBhbGNvaG9sIGFuZCBjaWdhcmV0dGUgdXNlLiBEaWV0IGFwcGVhcnMgdG8gaGF2ZSBzaW1pbGFyIHJhbmdlcyBvZiByZXNwb25zZXMgYmV0d2VlbiB0aGUgdHdvIHllYXJzLCB3aGlsZSBtYXJpanVhbmEgdXNlIHdhcyB0aGUgb25seSB2YWx1ZSB0byBzaWduaWZpY2FudGx5IGluY3JlYXNlIGluIHJlY2VudCBoaXN0b3J5LgohW2JveHBsb3QyXSguLi8wMyBWaXN1YWxpemF0aW9ucy9ib3hwbG90am9pbnMyMi5wbmcpCgojIyBBZ2dyZWdhdGVkIE1lYXN1cmVzIEFuYWx5c2lzCltkZXNjcmlwdGlvbl0KIVthZ10oLi4vMDMgVmlzdWFsaXphdGlvbnMvZmxhZy5wbmcpCgojIyBTY2F0dGVyIFBsb3RzCltkZXNjcmlwdGlvbl0KIVtzcF0oLi4vMDMgVmlzdWFsaXphdGlvbnMvZmxhZy5wbmcpCgoKIyMgQ3Jvc3N0YWJzCk91ciBjcm9zc3RhYiB2aXN1YWxpemF0aW9uIGlsbHVzdHJhdGVkIHRoZSBLUEkgb2YgeW91bmcgYWR1bHRzLCBzdWJjYXRlZ29yaXplZCBieSBzZXggYW5kIHJhY2UuIAoKT3VyIEtQSSB3ZWlnaHRlZCBkYXRhIGZyb20gdGhlIGdyZWF0ZXIgcmlzayBkYXRhIHF1ZXN0aW9ucywgdGhlIGxlc3NlciByaXNrIGRhdGEgcXVlc3Rpb25zLCBmYWN0b3JlZCBieSB0aGUgcHJvcG9ydGlvbiBvZiBhZHVsdHMgd2l0aCBiYWNoZWxvcidzIGRlZ3JlZSBpbiB0aGF0IGdlb2dyYXBoaWMgc3RhdGUuIAoKWW91IGNhbiBzZWUgdGhlIHRyZW5kcyBmb3IgcmFjZSBncm91cGVkIGJ5IGdlbmRlci4gVGhlcmUgYXBwZWFycyB0byBiZSBhIHNvbWUgY29tbW9uYWxpdHkgYmV0d2VlbiB0aGUgZ3JvdXBzIGFuZCBzdWJncm91cHMgcmVnYXJkaW5nIHRoZWlyIGhlYWx0aCByaXNrIGZvciBlYWNoIHZhcmlhYmxlLiBXZWlnaHQgbG9zcyBzZWVtcyB0byBiZSB0aGUgbW9zdCBhdC1yaXNrIHZhcmlhYmxlLCBmb2xsb3dlZCBieSBhbGNvaG9sIHVzZSBmb3IgZ2lybHMgYW5kIHBoeXNpY2FsIGZpZ2h0aW5nIChhbmQgYWxjb2hvbCB1c2UpIGZvciBib3lzLiAKIVtDcm9zc3RhYktQSV0oLi4vMDMgVmlzdWFsaXphdGlvbnMvQ3Jvc3N0YWIrS1BJMi5wbmcpCgpUaGUgY3Jvc3N0YWIgd2FzIHJlc3RydWN0cmVkLCB0aGlzIHRpbWUgZ3JvdXBpbmcgdGhlIHNleGVzIG5leHQgdG8gZWFjaCBvdGhlciBpbiBlYWNoIHJhY2UuIFRoaXMgZ3JvdXBpbmcgc3VnZ2VzdHMgdGhhdCBtb3JlIHZhcmlhdGlvbiBleGlzdHMgYmV0d2VlbiBmZW1hbGVzIG9mIGRpZmZlcmVudCByYWNlcywgdGhhbiB0aGUgdmFyaWF0aW9uIHRoYXQgZXhpc3RzIGJldHdlZW4gdGhlIG1hbGVzIGFuZCBmZW1hbGVzIG9mIHRoZSBzYW1lIHJhY2UuICAKIVtDcm9zc3RhYktQSV0oLi4vMDMgVmlzdWFsaXphdGlvbnMvQ3Jvc3N0YWIrS1BJMS5wbmcpCkxhc3RseSwgb3VyIEtQSSBoZWF0bWFwIHNob3dlZCBhIHNpZ25pZmljYW50IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGdlb2dyYXBoaWMgbG9jYXRpb24gYW5kIEtQSSBzY29yZS4gVGhlIG1hcCBiZWxvdyBzaG93cyBncm91cGluZ3Mgb2YgS1BJIHZhbHVlcywgd2l0aCBzdGF0ZXMgZ2VvZ3JhcGhpY2FsbHkgY2xvc2VyIHRvIGVhY2ggb3RoZXIgc2hhcmluZyBzaW1pbGFyIEtQSSBzY29yZXMgYXMgd2VsbC4gCiFbQ3Jvc3N0YWJLUEltYXBdKC4uLzAzIFZpc3VhbGl6YXRpb25zL0Nyb3NzdGFiK0tQSTMucG5nKQoKIyMgQmFyY2hhcnRzCltkZXNjcmlwdGlvbl0KIVtiY10oLi4vMDMgVmlzdWFsaXphdGlvbnMvZmxhZy5wbmcpCgoKCiMgKipMaW5rIHRvIFNoaW55IGFwcCBhcHBsaWNhdGlvbioqCkhlcmUgaXMgb3VyIGxpbmsgdG8gb3VyIHNoaW55IGFwcCBhcHBsaWNhdGlvbjogaHR0cHM6Ly9rYXR6ZW4uc2hpbnlhcHBzLmlvL2tobHNoaW55LwoKIyBIZXJlIGFyZSBvdXIgU2hpbnkgUGxvdHMKCiMjIEJveHBsb3QKSXQncyBhIHBsb3RseSBib3hwbG90IHRoYXQgc2hvd3MgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgdmFyaW91cyByaXNrIGZhY3RvcnMgYnkgdG9waWMuIFlvdSBjYW4gY2hhbmdlIHdoaWNoIHRvcGljcyB5b3Ugc2VlIHdoZW4geW91IGdldCB0aGUgZGF0YS4KIVtzaGlueWJ4XSguLi8wMyBWaXN1YWxpemF0aW9ucy9zaGlueWJveC5wbmcpCgojIyBIaXN0b2dyYW0KVGhpcyBoaXN0b2dyYW0gbWVhc3VyZXMgdGhlIGZyZXF1ZW5jeSBvZiByaXNrIGZhY3RvcnMgYXMgaXQgcmVsYXRlcyB0byB0aGVpciBpbnRlbnNpdHkuIEJlY2FzdWUgdGhlIGNvdW50cyBmb3IgZWFjaCByYWNlIHdlcmUgbm90IGVxdWFsLCBpbiBvcmRlciB0byBjb21wYXJlIHRoZW0gdGhleSBhcmUgYWxsIG5vcm1hbGl6ZWQgdG8gd2hlcmUgdGhlIGxhcmdlc3QgY291bnQgZm9yIGEgd2luZG93IGVxdWFscyBvbmUuIEFsc28sIHlvdSBjYW4gY2hhbmdlIHRoZSBiaW4gc2l6ZXMgb24gdGhlIGZseS4KIVtzaGlueWhzXSguLi8wMyBWaXN1YWxpemF0aW9ucy9zaGlueWhpc3QucG5nKQoKIyMgU2NhdHRlciBQbG90ClRoZSBsYWJlbHMgYXJlbid0IHNob3dpbmcgdXAgZm9yIHNvbWUgcmVhc29uLCBidXQgdGhlIHggYXhpcyBpcyBwZXJjZW50YWdlIG9mIHdoaXRlIHBlb3BsZSBpbiBhIHN0YXRlIGFuZCB0aGUgeSBheGlzIGlzIHRoYXQgc3RhdGVzIGF2ZXJhZ2UgcmlzayBmYWN0b3IuIEl0IGRvZXNuJ3QgYXBwZWFyIHZlcnkgd2VsbCBjb3JyZWxhdGVkIGFuZCB0aGVyZSBpcyBvbmUgb3V0bGllciAoSGF3YWlpKS4gCiFbc2hpbnlzcF0oLi4vMDMgVmlzdWFsaXphdGlvbnMvc2hpbnlwbG90LnBuZykKCiMjIENyb3NzdGFiClRoaXMgaXMgYSBjcm9zcyB0YWIgdGhhdCBzaG93cyB0aGUgdmFyaW91cyBhdmVyYWdlIHJpc2sgZmFjdG9ycyBpbiB0aGUgYm94ZXMsIGRlcGVkaW5nIG9uIHdoYXQgcmFjZSBpcyBvbiB0aGUgeCBheGlzIGFuZCB3aGF0IHN0YXRlIGlzIG9uIHRoZSB5IGF4aXMuIFNvbWUgdmFsdWVzIGFyZSBtaXNzaW5nIHVuZm9ydHVuYXRsZXkuIEJ1dCB0aGF0J3MgdG8gYmUgZXhwZWN0ZWQuIFlvdSB3b3VsZG4ndCB0aGluayBIYXdhaWkgd291bGQgaGF2ZSBtYW55IEFtZXJpY2FuIEluZGlhbnMgcmlnaHQ/IFRoZSBLUEkgaXMgZGVwZW5kZW50IG9uIHdldGhlciB0aGF0IHJpc2sgZmFjdG9yIGlzIGVzcGVjaWFsbHkgaGlnaCBvciBsb3cuCiFbc2hpbnljdF0oLi4vMDMgVmlzdWFsaXphdGlvbnMvc2hpbnljcm9zcy5wbmcpCgojIyBCYXJjaGFydApXZSd2ZSBnb3QgdGhpcyB3b25kZXJmdWwgYmFyY2hhcnQgd2hvc2UgeCBsYWJlbHMgd29uJ3Qgc2hvdyB1cC4gVGhlIHggYXhpcyBpcyByaXNrIGZhY3RvciB2YWx1ZXMuIEl0J3MgZmFjZXRlZCBieSBSYWNlIGFuZCB0aGUgeSBheGlzIGlzIHRvcGljLiBUaGUgYmxhY2sgbnVtYmVycyByZXByZXNlbnQgaG93IGxhcmdlIG9mIGEgcmlzayBmYWN0b3IgaXQgaXMgYW5kIHRoZSBibHVlIG51bWJlcnMgcmVwcmVzZW50IGhvdyBmYXIgYXdheSBpdCBpcyBmcm9tIHRoZSB3aW5kb3cgYXZlcmFnZSByaXNrIGZhY3Rvciwgd2hpY2ggaXMgdGhlIHJlZCBudW1iZXIuIFRoZXJlIHJlYWxseSBzaG91bGRuJ3QgYmUgbXVsdGlwbGUgcmVkIGJhcnMgb24gdGhlIHRvcHMsIGJ1dCB0aGF0IG9ubHkgYXBwZWFycyBpbiB0aGUgbm90ZWJvb2sgZmlsZS4gSWYgeW91IGdvIHRvIHRoZSBzaGlueWFwcCwgdGhleSBhcmVuJ3QgdGhlcmUuIAohW3NoaW55YmNdKC4uLzAzIFZpc3VhbGl6YXRpb25zL3NoaW55YmFyLnBuZykK